// 箭头函数体测试 - 验证ConciseBody规则顺序修复
// 测试函数体（块语句）和表达式（对象字面量、普通表达式）的正确解析

// ============================================
// 测试组1：函数体（块语句）- 应该优先匹配
// ============================================

// 1.1 简单函数体
const f1 = x => { return x + 1; }

// 1.2 多语句函数体
const f2 = (a, b) => { 
    const sum = a + b;
    return sum;
}

// 1.3 空函数体
const f3 = () => { }

// 1.4 只有console.log的函数体
const f4 = () => { 
    console.log('hello');
}

// 1.5 带参数的复杂函数体
const f5 = (x, y, z) => {
    if (x > 0) {
        return y + z;
    }
    return 0;
}

// ============================================
// 测试组2：表达式 - 对象字面量（需要括号）
// ============================================

// 2.1 简单对象字面量
const f6 = x => ({ value: x })

// 2.2 多属性对象字面量
const f7 = x => ({ a: 1, b: 2 })

// 2.3 空对象字面量
const f8 = () => ({ })

// 2.4 嵌套对象字面量
const f9 = x => ({ 
    name: 'test',
    data: { value: x }
})

// ============================================
// 测试组3：表达式 - 普通值和表达式
// ============================================

// 3.1 简单表达式
const f11 = x => x + 1

// 3.2 括号表达式
const f12 = x => (x + 1)

// 3.3 二元表达式
const f13 = (a, b) => a + b

// 3.4 条件表达式
const f14 = x => x > 0 ? x : -x

// 3.5 数组字面量
const f15 = x => [x, x * 2]

// 3.6 空数组
const f16 = () => []

// ============================================
// 测试组4：嵌套箭头函数
// ============================================

// 4.1 嵌套箭头函数（表达式）
const f17 = x => y => x + y

// 4.2 嵌套箭头函数（函数体）
const f18 = x => y => { return x + y; }

// 4.3 混合嵌套
const f19 = x => y => { 
    const sum = x + y;
    return z => sum + z;
}

// ============================================
// 测试组5：async箭头函数
// ============================================

// 5.1 async + 函数体
const f20 = async x => { return x; }

// 5.2 async + 表达式
const f21 = async x => x + 1

// 5.3 async + 对象字面量
const f22 = async x => ({ value: x })

// ============================================
// 测试组6：关键测试用例（修复验证）
// ============================================

// 6.1 核心测试：函数体应该被正确识别（不是对象字面量）
const criticalTest1 = x => { return 1; }
// 预期：箭头函数，函数体返回1
// 修复前可能错误：x => ({ return: 1 })（对象字面量）

// 6.2 核心测试：带多个语句的函数体
const criticalTest2 = x => {
    const temp = x * 2;
    return temp + 1;
}
// 预期：正确解析为函数体（两个语句）

// 6.3 对比测试：对象字面量需要括号
const criticalTest3 = x => ({ return: 1 })
// 预期：返回对象 {return: 1}（属性名为return）

console.log('All arrow function concise body tests defined');


































